始めてみよう CfnClusterでHPCクラスター
こんにちは、吉井です。
いかがお過ごしでしょうか。
今回はCfnClusterを取り上げます。
CfnClusterは、HPC(ハイパフォーマンスコンピューティング)のワークロードを実行する環境を素早く簡単に作成出来るAWS製のツールです。
使いたい時に使いたい分だけコンピューティングリソースを作成し
計算が終わったら削除する、といった運用が可能です。
構成図
CfnClusterを使って以下のようなHPCクラスターをデプロイします。
左側の”作業ノード”はご自身の端末になります。
はじめに
以下は事前に作っておきます。
- VPC
- サブネット
- ルートテーブル
- インターネットゲートウェイ
- IAMユーザー(※)
- EC2 キーペア
(※)IAMユーザーにはAdministatorのポリシーをアタッチし、アクセスキーを発行しておきます。
CfnClusterの準備
CfnClusterインストール
作業ノードにCfnClusterをインストールします。
作業ノードのOSはLinux(Ubuntu)を想定しています。
CfnClusterはpythonで書かれています。まずはpythonをインストールしておきます。
$ sudo apt install python python-pip
CfnClusterをインストールします。
helpが表示されればOKです。
$ sudo pip install cfncluster $ cfncluster --help usage: cfncluster [-h] [--config CONFIG_FILE] [--region REGION] [--nowait] {create,update,delete,start,stop,status,list,instances,configure,version} ... ~~省略~~
CfnCluster初期設定
CfnCluster初期設定用のコマンドを実行し、ご自身の環境に合わせた値を入力します。
$ cfncluster configure Cluster Template [default]: <クラスター名を入力> AWS Access Key ID []: <Access Keyを入力> AWS Secret Access Key ID []: <Secret Access Keyを入力> Acceptable Values for AWS Region ID: ap-south-1 eu-west-3 eu-west-2 eu-west-1 ap-northeast-2 ap-northeast-1 sa-east-1 ca-central-1 ap-southeast-1 ap-southeast-2 eu-central-1 us-east-1 us-east-2 us-west-1 us-west-2 AWS Region ID []: <リージョンを入力> VPC Name [public]: <CfnCluster設定ファイル内で定義する任意のVPC名を指定。実際のVPC名ではありませんのでご注意> Acceptable Values for Key Name: your_keypair Key Name []: <キーペア名を入力> Acceptable Values for VPC ID: vpc_yourvpc VPC ID []: <VPC IDを入力> Acceptable Values for Master Subnet ID: subnet-yoursubnet1 subnet-yoursubnet2 subnet-yoursubnet3 Master Subnet ID []: <Subnet IDを入力>
ホームディレクトリに設定ファイルが出来ているはずです。
$ ls ~/.cfncluster/ config
CfnClusterの起動
クラスター作成
cfncluster create <クラスター名>を実行するとクラスターが作成されます。(10~15分程度要する)
今回は「default」というクラスター名を設定しています。ご自身の環境に合わせてクラスター名を指定してください。
$ cfncluster create default Beginning cluster creation for cluster: default Creating stack named: cfncluster-default Status: cfncluster-default - CREATE_COMPLETE MasterPublicIP: nn.nn.nn.nn MasterPrivateIP: mm.mm.mm.mm GangliaPublicURL: http://nn.nn.nn.nn/ganglia/ GangliaPrivateURL: http://mm.mm.mm.mm/ganglia/
裏側ではCloudFormationが走っています。
AWSマネジメントコンソールからCloudFormationを見るとスタックが出来ています。
クラスター状態確認
cfncluster statusコマンドで状態を確認します。
$ cfncluster status default Status: CREATE_COMPLETE MasterServer: RUNNING MasterPublicIP: nn.nn.nn.nn MasterPrivateIP: mm.mm.mm.mm GangliaPublicURL: http://nn.nn.nn.nn/ganglia/ GangliaPrivateURL: http://mm.mm.mm.mm/ganglia/
cfncluster instancesコマンドでクラスター内のインスタンスを確認します。
今回の例ではマスターノード1台、計算ノード2台が起動していることが確認出来ます。
$ cfncluster instances default MasterServer i-xxxxxxxxxxxxxxxxx ComputeFleet i-xxxxxxxxxxxxxxxxx ComputeFleet i-xxxxxxxxxxxxxxxxx
テストジョブの実行
クラスターが出来たところでテストジョブを実行してみます。
マスターノードにsshで接続します。
/sharedというマウントポイントが出来ています。ここはNFSで計算ノードに共有されています。
全ノードへ見せたいデータ、例えば実行プログラムなどはここに配置します。
それでは、Hello Wolrdプログラムを作っていきましょう。
$ cd /shared $ mkdir hw_work $ cd hw_work $ vi hellojob.sh #!/bin/bash sleep 30 echo "Hello World from $(hostname)"
Hello Worldプログラムをスケジューラーのキューに投入します。
qsub <プログラムパス>で投入、qstatでキューの状態確認です。
$ qsub hellojob.sh Your job 1 ("hellojob.sh") has been submitted $ qstat job-ID prior name user state submit/start at queue slots ja-task-ID ----------------------------------------------------------------------------------------------------------------- 1 0.00000 hellojob.s ec2-user qw 07/13/2018 09:38:23 1
ホームディレクトリに結果が出力されています。
$ cat ~/hellojob.sh.o1 Hello World from <計算ノードホスト名>
クラスターの停止
計算が終わったらクラスターを停止しておきます。
作業ノードから cfncluster stop コマンドを実行します。
$ cfncluster stop default Stopping compute fleet : default $ cfncluster instances default MasterServer i-xxxxxxxxxxxxxxxxx
計算ノードが停止しました。
cfncluster stopコマンドでは、マスターノードは停止しないのでご自身でシャットダウンします。
クラスターの削除
不要になったクラスターは削除します。
cfncluster deleteコマンドで削除出来ます。
$ cfncluster delete default Deleting: default Status: DynamoDBTable - DELETE_COMPLETE Cluster deleted successfully.
最後に
ますは入門として初期設定でのクラスター作成~テストジョブ実行~削除までを試してみました。
インフラにそれほど詳しくない方でも簡単にHPCクラスターが実行出来そうです。